# Copyright (C) 2007 Laszlo Pandy <laszlok2@gmail.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

import Utils
import ShareProfile

class Category:
	def __init__(self, name, paidBy=None, sharedBy=None):
		#the name or title of this category
		self.name = name
		
		self.paidBy = paidBy
		
		#a ShareProfile instance representing the people this category is shared by
		#i.e. who consumes the goods bought in this category
		self.setSharedBy(sharedBy)
		
	def __repr__(self):
		return "Category(\"%s\")" % self.name
	
	def __str__(self):
		return self.name
	
	def __cmp__(self, object):
		if isinstance(object, Category):
			name = Utils.strCmp(str(self), str(object))
			if name != 0:
				return name
			paid = cmp(self.paidBy, object.paidBy)
			if paid != 0:
				return paid
			
			return cmp(self.sharedBy, object.sharedBy)
		
		return Utils.strCmp(str(self), str(object))
	
	def __hash__(self):
		return hash(self.name.lower())
	
	def copy(self):
		return Category(self.name, self.paidBy, self.sharedBy.copy())
	
	def setSharedBy(self, sharedBy):
		self.sharedBy = sharedBy
	
	def setPaidBy(self, paidBy):
		self.paidBy = paidBy
		
	def getSharedBy(self):
		return self.sharedBy
	
	def isSharedBy(self, person):
		shareType, value = self.getSharedBy().getPersonShare(person)
		return (shareType != ShareProfile.SHARE_NONE)
	
	def getName(self):
		return self.name
	
	def getPaidBy(self):
		return self.paidBy
	
	def swapPerson(self, person, newPerson):
		if self.paidBy == person:
			self.paidBy = newPerson
		self.sharedBy.swapPerson(person, newPerson)
